package fr.afcepf.atodcp2.benbai.servicesmetier.implementations;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.transaction.annotation.Transactional;

import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoCommande;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoLigneCommande;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoPanier;
import fr.afcepf.atodcp2.benbai.dao.interfaces.IDaoProduit;
import fr.afcepf.atodcp2.benbai.entity.Adresse;
import fr.afcepf.atodcp2.benbai.entity.Client;
import fr.afcepf.atodcp2.benbai.entity.Commande;
import fr.afcepf.atodcp2.benbai.entity.LigneCommande;
import fr.afcepf.atodcp2.benbai.entity.Panier;
import fr.afcepf.atodcp2.benbai.entity.Produit;
import fr.afcepf.atodcp2.benbai.entity.TypeAdresse;
import fr.afcepf.atodcp2.benbai.servicesmetier.interfaces.IMetierGestionCommande;
import fr.afcepf.atodcp2.benbai.viewentity.AffichageProduit;

public class MetierGestionCommande implements IMetierGestionCommande {
	BeanFactory bf = new ClassPathXmlApplicationContext("benbaiSpringConf.xml");
	IDaoPanier daoPanier = (IDaoPanier)bf.getBean("DaoPanier");
	IDaoCommande daoCommande = (IDaoCommande)bf.getBean("DaoCommande");
	IDaoLigneCommande daoLigneCommande = (IDaoLigneCommande)bf.getBean("DaoLigneCommande");
	IDaoProduit daoProduit = (IDaoProduit)bf.getBean("DaoProduit");

	@Override
	public List<AffichageProduit> getListeProduitsByCommande(Commande commande) {		
		List<AffichageProduit> listeAffichageProduit = new ArrayList<AffichageProduit>();
		List<LigneCommande> listeLigneCmd = new ArrayList<LigneCommande>();
		Panier panier = daoPanier.getPanierByCommande(commande);
		listeLigneCmd = daoLigneCommande.getLignesCommandeByPanier(panier);
		for (LigneCommande ligneCommande : listeLigneCmd) {
			Produit prod = daoProduit.getProduitByLigneCommande(ligneCommande);
			AffichageProduit affProd = new AffichageProduit();
			double montant = ligneCommande.getQuantite()*prod.getPrixProduit();
			affProd.setMontantProduit(montant);
			affProd.setProduit(prod);
			affProd.setQuantite(ligneCommande.getQuantite());
			listeAffichageProduit.add(affProd);
		}		
		return listeAffichageProduit;
	}

	@Override
	public List<Commande> getListeCommandesByClient(Client client) {
		List<Commande> liste1 = new ArrayList<Commande>();
		List<Commande> retour = new ArrayList<Commande>();
		liste1 = daoCommande.getCommandesByClient(client);
		for (Commande commande : liste1) {
			if(commande.isValidationCommande()){
				retour.add(commande);
			}
		}
		return retour;
	}

	@Override
	public List<Panier> getListeSavedPanierByClient(Client client) {
		List<Commande> liste1 = new ArrayList<Commande>();
		List<Commande> liste2 = new ArrayList<Commande>();
		List<Panier> retour = new ArrayList<Panier>();
		liste1 = daoCommande.getCommandesByClient(client);
		for (Commande commande : liste1) {
			if(!commande.isValidationCommande()){
				liste2.add(commande);
			}
		}
		for (Commande commande : liste2) {
			Panier p = daoPanier.getPanierByCommande(commande);
			retour.add(p);
		}
		return retour;
	}

	@Override
	public Panier ajouterPanier(Panier panier, Produit produit) {
		
		
		
		return null;
	}
	

}
